아이템19
추론 가능한 타입을 사용해 장황한 코드 방지하기
- 타입스크립트의 많은 타입 구문은 사실 불필요하다. 다음과 같이 코드의 모든 변수에 타입을 선언하는 것은 비생산적이며 형편없는 스타일로 여겨진다.
// 비생산적인 코드
let x: number = 12;
// 개선한 코드
let x = 12;
- 타입이 추론되면 리펙터링 역시 용이해진다.
// 비구조화 할당문
function logProduct(product: Product) {
const { id, name, price } = product;
}
// 비구조화 할당문 + 명시적 타입 구문
function logProduct(product: Product) {
const { id, name, price }: { id: string; name: string; price: number} = product;
}
-
정보가 부족해서 타입 판단이 어려울떄가 명시적 타입 구문이 필요할 때 이다.
-
이상적인 타입스크립트 코드는 함수/메서드 시그니처에 타입 구문을 포함하지만, 함수 내에서 생성된 지역 변수에는 타입 구문을 넣지 않는다.
-
보통 타입 정보가 있는 라이브러리에서, 콜백 함수의 매개변수 타입은 자동으로 추론된다.
// 이렇게 하면 안된다!
app.get('/health', (request: express.Request, response: express.Response) => {
response.send('OK');
});
// 이렇게 사용하기!
app.get('/health', (request, response) => {
response.send('OK');
});
객체 리터럴을 정의 할 때
- 객체 리터럴의 정의에 타입을 명시하면, 잉여 속성 체크가 동작 함수의 반환에도 타입을 명시하여 오류를 방지
- 타입 추론이 가능할지라도 구현상의 오류가 함수를 호출한 곳까지 영향을 미치지 않도록 하기 위해 타입 구문을 명시하는 것이 좋음
- 반환 타입을 명시하면, 구현상의 오류가 사용자 코드의 오류로 표시되지 않는다.